1) Ensure that any DELETE requests from the target are sent to GDK, even if
both the source and the target are in the same process and it
is therefore possible to use a shortcut and call the handler directly
in GTK layer
2) Ensure that target GDK doesn't do anything when GTK asks it to send
a DELETE request, just report back immediately (the code up the stack
does not check for successfullness when request is DELETE, so not giving
it any data is OK).
The source code already synthesizes a DELETE request, so that side is
also taken care of.
https://bugzilla.gnome.org/show_bug.cgi?id=786509
fmt.lindex = -1;
fmt.tymed = TYMED_HGLOBAL;
+ /* We rely on GTK+ applications to synthesize the DELETE request
+ * for themselves, since they do know whether a DnD operation was a
+ * move and whether was successful. Therefore, we do not need to
+ * actually send anything here. Just report back without storing
+ * any data.
+ */
+ if (target == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_DELETE))
+ return result;
+
for (format = 0, with_transmute = 0; format == 0 && with_transmute < 2; with_transmute++)
{
for (i = 0;
display = gtk_widget_get_display (widget);
owner_window = gdk_selection_owner_get_for_display (display, selection);
+#ifdef GDK_WINDOWING_WIN32
+ /* Special handling for DELETE requests,
+ * make sure this goes down into GDK layer.
+ */
+ if (GDK_IS_WIN32_DISPLAY (display) &&
+ target == gdk_atom_intern_static_string ("DELETE"))
+ owner_window = NULL;
+#endif
+
if (owner_window != NULL)
{
GtkWidget *owner_widget;